Skip to content

Add support for Microchip EV23X71A (Laguna) - #1596

Open
troglobit wants to merge 5 commits into
mainfrom
laguna
Open

Add support for Microchip EV23X71A (Laguna)#1596
troglobit wants to merge 5 commits into
mainfrom
laguna

Conversation

@troglobit

Copy link
Copy Markdown
Contributor

Description

  • Initial board support, including bootloader, for Microchip EV23X71A (Laguna)
  • statd: refactor temp sensors, consolidate SoC sensor handling
  • doc/: update netboot.md, how to flash a remote device

Checklist

Tick relevant boxes, this PR is-a or has-a:

  • Bugfix
    • Regression tests
    • ChangeLog updates (for next release)
  • Feature
    • YANG model change => revision updated?
    • Regression tests added?
    • ChangeLog updates (for next release)
    • Documentation added?
  • Test changes
    • Checked in changed Readme.adoc (make test-spec)
    • Added new test to group Readme.adoc and yaml file
  • Code style update (formatting, renaming)
  • Refactoring (please detail in commit messages)
  • Build related changes
  • Documentation content changes
    • ChangeLog updated (for major changes)
  • Other (please describe):

@troglobit
troglobit requested review from mattiaswal and a lite review from Copilot August 24, 2026 09:17
Have been seen failure on hardware `PTP transparent clock (IEEE 802.1AS)`
where it fails on hardware in CI:

Test File: /home/styx/.ghmoon/kernelkit/infix/git/test/case/ptp/transparent_clock/ieee802dot1as.py
Test Cmdl: ['--profile', 'ieee802-dot1as']
2026-08-20 13:25:58 # Starting (2026-08-20 13:25:58)
2026-08-20 13:25:58 # host:    monza
2026-08-20 13:25:58 #     mgmt1:   sw1p3
2026-08-20 13:25:58 #     mgmt2:   sw1p2
2026-08-20 13:25:58 #     mgmt3:   sw1p1
2026-08-20 13:25:58 # gm:      styx3
2026-08-20 13:25:58 #     data:    e3
2026-08-20 13:25:58 #     mgmt:    e28
2026-08-20 13:25:58 # tc:      styx2
2026-08-20 13:25:58 #     uplink:  e4
2026-08-20 13:25:58 #     dnlink:  e3
2026-08-20 13:25:58 #     mgmt:    e28
2026-08-20 13:25:58 # receiver: styx1
2026-08-20 13:25:58 #     data:    e4
2026-08-20 13:25:58 #     mgmt:    e28
2026-08-20 13:25:58 #
2026-08-20 13:25:58 # Waiting for DUTs to become reachable...
2026-08-20 13:25:58 # Probing styx3 on port sw1p3 for IPv6LL mgmt address ...
2026-08-20 13:25:58 # Testing using RESTCONF
2026-08-20 13:25:59 # YANG models downloaded.
2026-08-20 13:26:02 # Waiting for DUTs to become reachable...
2026-08-20 13:26:02 # Probing styx2 on port sw1p2 for IPv6LL mgmt address ...
2026-08-20 13:26:02 # Testing using RESTCONF
2026-08-20 13:26:02 # YANG models downloaded.
2026-08-20 13:26:06 # Waiting for DUTs to become reachable...
2026-08-20 13:26:07 # Probing styx1 on port sw1p1 for IPv6LL mgmt address ...
2026-08-20 13:26:07 # Testing using RESTCONF
2026-08-20 13:26:07 # YANG models downloaded.
2026-08-20 13:26:10 ok 1 - Set up topology and attach to DUTs
2026-08-20 13:26:12 ok 2 - Configure grandmaster (OC, priority1=1, p2p)
2026-08-20 13:26:14 ok 3 - Configure transparent clock (p2p-tc, ieee802-dot1as)
2026-08-20 13:26:15 ok 4 - Configure time receiver (OC, priority1=128, client-only)
2026-08-20 13:26:18 ok 5 - Wait for grandmaster port to become time-transmitter
2026-08-20 13:26:22 ok 6 - Wait for time receiver to reach time-receiver state
2026-08-20 13:26:23 ok 7 - Verify time receiver steps-removed equals 1
2026-08-20 13:31:31 not ok 8 - Wait for time receiver offset to converge
2026-08-20 13:31:31 # Exiting (2026-08-20 13:31:31)
2026-08-20 13:31:31 # Traceback (most recent call last):
2026-08-20 13:31:31 #   File "/home/styx/.ghmoon/kernelkit/infix/git/test/case/ptp/transparent_clock/ieee802dot1as.py", line 173, in
2026-08-20 13:31:31 #     until(lambda: ptp.has_converged(receiver, threshold_ns), attempts=180)
2026-08-20 13:31:31 #   File "/home/styx/.ghmoon/kernelkit/infix/git/test/infamy/util.py", line 55, in until
2026-08-20 13:31:31 #     raise Exception("Expected condition did not materialize")
2026-08-20 13:31:31 # Exception: Expected condition did not materialize
2026-08-20 13:31:31 # 1..8
test error, no plan

Add more debug to be able to investigate it when it occur.

Signed-off-by: Mattias Walström <lazzer@gmail.com>
The collection scales with port count (three ethtool calls per
interface, incl. SFP EEPROM reads) and log size, and 120s is not
always enough on a 28-port switch at the end of a full test run.

Signed-off-by: Mattias Walström <lazzer@gmail.com>
Add board support for the Microchip EV23X71A evaluation board, based on
the LAN969x (Laguna) family: a Cortex-A53 with a TSN capable switch core,
24 GbE copper ports over QSGMII, four 10G SFP+ cages, and an RGMII
management port.  The sample here reports part 0x969b, a LAN9696RED,
one of the variants for which the driver offers PTP and PSFP.

Ports are renamed from the device tree path each netdev carries, e1
through e28 for the front ports and e29 for management.  The switch
driver leaves naming to the kernel, and there is no port@28, so the
kernel names end up one off from Microchip's numbering.  Attaching 29
PHYs also takes far longer than the ten seconds hw-wait allows, so that
timeout is now read from /etc/default/hw-wait.

Infix builds its own boot chain rather than using the one the board
ships with: Microchip's Trusted Firmware for BL2 and BL31, and their
U-Boot for BL33, which carries the LAN969x support but leaves out
blkmap, SquashFS, and sysboot.  It keeps no environment in flash, so a
writable environment cannot be used to bypass secure boot.  That needs
the ENV_IS_NOWHERE patch, since the board only ever asks for the
location matching the medium it booted from.

Trusted Board Boot needs mbed TLS to parse the X.509 in the FIP's
certificates, from the 2.28 series ATF 2.8 builds against, hence the new
mbedtls-atf package.  Buildroot's mbedtls tracks 3.x, where the sources
ATF expects are gone.  Two ATF build variables are not obvious:
KEY_ALG=ecdsa, since the LAN969x crypto driver is built around the Silex
ECDSA engine, and GENERATE_COT=1, without which the FIP carries no
certificates for the ROM to check.  Trusted Firmware is pinned to a
commit rather than a tag because no tag carries the fix for
ERR-LAN969X-001, where the boot ROM's ECDSA verifier mishandles P-256
values with a leading zero byte.

The eMMC layout keeps the fip and fip.bak partition names, which is how
BL1 finds the firmware and its fallback, followed by the usual Infix
partitions.  See the board README for the strapping table, the rescue
paths, and how to install and update.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
The CPU temperature was missing from show system on LAN969x and SparX-5.
The kernel names the hwmon device s5_temp, which normalize_sensor_name()
reduced to temp, taking s5_ for a vendor prefix, and nothing downstream
recognized that as a die temperature.

Each consumer/frontend carried its own list of names, and they disagreed:
the CLI matched cpu, soc, core, ap- and cp<N>-, the WebUI dashboard cpu,
soc and core plus radio, phy and sfp prefixes.  A new SoC meant patching
every one.

Give the SoC a component of its own, class iana-hardware:cpu, with the
die sensors as its children.  Consumers then ask for a celsius sensor
whose parent is a CPU, the same question over NETCONF, RESTCONF, the
WebUI, and the CLI, and hwmon and thermal zone names are recognized in
a single place.

Names are keys, not descriptions, so keep them unique rather than
collapsing them: s5_temp becomes s5-temp, cp0_temp becomes cp0-temp.
This also brings in x86, where coretemp and k10temp never matched.

The CLI 'show hardware' command groups sensors under any component that
has them, not just modules, so the new CPU sensors are listed.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
A device with empty storage has no slot to boot, so it falls back to
DHCP on its own.  Pointing the boot file at a rootfs.itb is therefore
enough to bring a factory fresh board all the way up to a running
system, with no console interaction and no netboot.scr, since the
ixprepdhcp handler downloads and validates the image itself.

From there the system can install itself: build the image, give the
netbooted system an address, and stream it onto the eMMC.  Document
that, including the partition table warning that follows, which the
first boot resolves when it grows the last partition.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
@mattiaswal

Copy link
Copy Markdown
Contributor

USB test fails, please investigate. I suspect your commit about statd

@@ -0,0 +1,24 @@
################################################################################
#
# mbedtls-atf

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clearly state why this extra package is needed here.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mentioned in the commit message, but OK, will fix!

@troglobit

Copy link
Copy Markdown
Contributor Author

USB test fails, please investigate. I suspect your commit about statd

Yup, name clash with the cpu VPD component, fixing by prefixing all VPD's with vpd-.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants